package hr.fer.zpr.nmbp.project1.dao;

import hr.fer.zpr.nmbp.project1.dao.exceptions.PrimaryKeyConstraintException;
import hr.fer.zpr.nmbp.project1.model.Bolnica;
import hr.fer.zpr.nmbp.project1.model.Lijecnik;
import hr.fer.zpr.nmbp.project1.model.Pacijent;

import java.util.List;

import com.db4o.ObjectContainer;
import com.db4o.constraints.UniqueFieldValueConstraintViolationException;

public class LijecnikDAO {

	private ObjectContainer db;
	
	public LijecnikDAO(ObjectContainer db) {
		this.db = db;
	}
    
    public void save(Lijecnik lijecnik) {    	
    	if(lijecnik.getSifra() == null || lijecnik.getSifra().isEmpty()){
			throw new PrimaryKeyConstraintException("Šifra liječnika ne smije biti NULL");
		}
		
		this.db.store(lijecnik);
		
		try{
			this.db.commit();
		}catch(UniqueFieldValueConstraintViolationException e){
			this.db.rollback();
			throw new PrimaryKeyConstraintException("Liječnik sa šifrom već postoji u bazi podataka");
		}    	
    }
    
    public void delete(Lijecnik lijecnik) {
    	Bolnica bolnica = lijecnik.getBolnica();
    	List<Pacijent> pacijenti = lijecnik.getPacijenti();
    	
    	if(bolnica != null && bolnica.getLijecnici() != null){
    		bolnica.getLijecnici().remove(lijecnik);
    	}
    	
    	this.db.delete(lijecnik);
		this.db.commit();
				
		for(Pacijent pacijent : pacijenti)
		{
			pacijent.setLijecnik(null);
		}
    }

    public List<Lijecnik> load(Lijecnik lijecnikPrototype) {
    	return this.db.queryByExample(lijecnikPrototype);
    }
    
    public List<Lijecnik> loadAll() {
    	return this.db.query(Lijecnik.class);
    }

}
